import requests
from common.logger import logger


class APIClient:
    def __init__(self, base_url):
        self.base_url = base_url

    def post(self, endpoint, headers=None, json=None):
        """
        发起一个POST请求。

        参数:
        - endpoint: 请求的API端点。
        - headers: (可选) 请求的HTTP头信息。
        - json: (可选) 请求的JSON数据。

        返回:
        - response: 来自请求的响应对象。
        """
        # 构建完整的请求URL
        url = f"{self.base_url}/{endpoint}"
        logger.info(f"api接口: {endpoint}")
        logger.info(f"请求接口URL: {url}")
        # 使用requests库发起POST请求
        response = requests.post(url, headers=headers, json=json)
        # 返回请求的响应对象
        return response

    def get(self, endpoint, headers=None, params=None):
        """
        发起一个GET请求。

        参数:
        - endpoint: 请求的API端点。
        - headers: (可选) 请求的HTTP头信息。
        - params: (可选) 请求的查询参数。

        返回:
        - response: 来自请求的响应对象。
        """
        url = f"{self.base_url}/{endpoint}"
        logger.info(f"api接口: {endpoint}")
        logger.info(f"请求接口URL: {url}")
        response = requests.get(url, headers=headers, params=params)
        return response

    def put(self, endpoint, headers=None, json=None):
        """
        发起一个PUT请求。

        参数:
        - endpoint: 请求的API端点。
        - headers: (可选) 请求的HTTP头信息。
        - json: (可选) 请求的JSON数据。

        返回:
        - response: 来自请求的响应对象。
        """
        url = f"{self.base_url}/{endpoint}"
        logger.info(f"api接口: {endpoint}")
        logger.info(f"请求接口URL: {url}")
        response = requests.put(url, headers=headers, json=json)
        return response

    def delete(self, endpoint, headers=None):
        """
        发起一个DELETE请求。
        参数:
        - endpoint: 请求的API端点。
        - headers: (可选) 请求的HTTP头信息。
        返回:
        - response: 来自请求的响应对象。
        """
        url = f"{self.base_url}/{endpoint}"
        logger.info(f"api接口: {endpoint}")
        logger.info(f"请求接口URL: {url}")
        response = requests.delete(url, headers=headers)
        return response

